home *** CD-ROM | disk | FTP | other *** search
/ Amiga Magazin: Amiga-CD 1996 March / Amiga-CD 1996 #3.iso / pd-software / mui_3.1 / developer / c / examples / menus.c < prev    next >
C/C++ Source or Header  |  1996-01-19  |  10KB  |  229 lines

  1. /*
  2. ** This demo shows the use of MUI's menus classes.
  3. */
  4.  
  5. #include "demo.h"
  6.  
  7.  
  8. /*
  9. ** MUI still supports the use of a conventional gadtools NewMenu structure
  10. ** to define a menu strip. The address of this structure is passed to a
  11. ** MUI_MakeObject(MUIO_MenustripNM,newmenu,0) function which creates a complete
  12. ** object tree for this menu and returns a pointer to the menustrip object,
  13. ** This pointer should be placed in a windows MUIA_Window_Menustrip attribute
  14. ** or in an applications MUIA_Application_Menustrip attribute, in which case
  15. ** all windows will inherit the menu. To get direct access to the menu item
  16. ** objects of such an auto generated tree, you can use the MUIM_FindUserData
  17. ** method.
  18. **
  19. ** You can of course create the menu object tree yourself by defining
  20. ** a menu strip object with some menu object children with some menu
  21. ** item object children with optionally some more menu item object
  22. ** children. In this case, use the MUI_MakeObject(MUIO_Menuitem,...)
  23. ** call to create the menu items if possible.
  24. **
  25. ** The main program shows some different methods how to create items and
  26. ** how to react on menu items. Choose the one you like best, and don't
  27. ** forget the MUIM_CallHook method if you dislike switch/case in the
  28. ** main loop!
  29. */
  30.  
  31. #define RB CHECKIT
  32. #define TG CHECKIT|MENUTOGGLE
  33.  
  34. enum { MEN_PROJECT=1,MEN_ABOUT,MEN_QUIT,MEN_EDIT,MEN_CUT,MEN_COPY,MEN_PASTE,MEN_SETTINGS,MEN_HARDWARE,MEN_A1000,MEN_A2000,MEN_A3000,MEN_A4000,MEN_SOFTWARE,MEN_MUI,MEN_MFR,MEN_MWB,MEN_DFA,ID_ADD,ID_REM,ID_RADIO };
  35.  
  36. static struct NewMenu MenuData1[] =
  37. {
  38.     { NM_TITLE, "Project"                  , 0 ,0 ,0             ,(APTR)MEN_PROJECT  },
  39.     { NM_ITEM ,  "About"                   ,"?",0 ,0             ,(APTR)MEN_ABOUT    },
  40.     { NM_ITEM ,  NM_BARLABEL               , 0 ,0 ,0             ,(APTR)0            },
  41.     { NM_ITEM ,  "Quit"                    ,"Q",0 ,0             ,(APTR)MEN_QUIT     },
  42.  
  43.     { NM_TITLE, "Edit"                     , 0 ,0 ,0             ,(APTR)MEN_EDIT     },
  44.     { NM_ITEM ,  "Cut"                     ,"X",0 ,0             ,(APTR)MEN_CUT      },
  45.     { NM_ITEM ,  "Copy"                    ,"C",0 ,0             ,(APTR)MEN_COPY     },
  46.     { NM_ITEM ,  "Paste"                   ,"V",0 ,0             ,(APTR)MEN_PASTE    },
  47.  
  48.     { NM_TITLE, "Settings"                 , 0 ,NM_MENUDISABLED,0,(APTR)MEN_SETTINGS },
  49.     { NM_ITEM ,  "Hardware"                , 0 ,NM_ITEMDISABLED,0,(APTR)MEN_HARDWARE },
  50.     { NM_SUB  ,   "A1000"                  ,"1",RB|CHECKED,2|4|8 ,(APTR)MEN_A1000    },
  51.     { NM_SUB  ,   "A2000"                  ,"2",RB,1|4|8         ,(APTR)MEN_A2000    },
  52.     { NM_SUB  ,   "A3000"                  ,"3",RB,1|2|8         ,(APTR)MEN_A3000    },
  53.     { NM_SUB  ,   "A4000"                  ,"4",RB,1|2|4         ,(APTR)MEN_A4000    },
  54.     { NM_ITEM ,  "Software"                , 0 ,NM_ITEMDISABLED,0,(APTR)MEN_SOFTWARE },
  55.     { NM_SUB  ,   "MUI"                    ,"M",TG,0             ,(APTR)MEN_MUI      },
  56.     { NM_SUB  ,   "MFR"                    ,"F",TG,0             ,(APTR)MEN_MFR      },
  57.     { NM_SUB  ,   "MagicWB"                ,"W",TG,0             ,(APTR)MEN_MWB      },
  58.     { NM_SUB  ,   "DFA"                    ,"D",TG,0             ,(APTR)MEN_DFA      },
  59.  
  60.     { NM_END,NULL,0,0,0,(APTR)0 },
  61. };
  62.  
  63.  
  64. int main(int argc,char *argv[])
  65. {
  66.     APTR app,win1,cm1,cm2,cm3,cm4,radio,cy1,cy2,cy3,menuset,menuedit,itemhw,itemsw,strip,menumisc,btadd,btrem;
  67.     ULONG signals,x;
  68.     BOOL running = TRUE;
  69.     BOOL addedmisc = FALSE;
  70.     static char *hardware[] = { "Amiga 1000", "Amiga 2000", "Amiga 3000", "Amiga 4000", NULL };
  71.     static char *endis1[]   = { "Settings disabled", "Settings enabled", NULL };
  72.     static char *endis2[]   = { "Hardware disabled", "Hardware enabled",  NULL };
  73.     static char *endis3[]   = { "Software disabled", "Software enabled",  NULL };
  74.  
  75.     init();
  76.  
  77.     app = ApplicationObject,
  78.         MUIA_Application_Title      , "Menus",
  79.         MUIA_Application_Version    , "$VER: Menus 12.9 (21.11.95)",
  80.         MUIA_Application_Copyright  , "©1994 by Stefan Stuntz",
  81.         MUIA_Application_Author     , "Stefan Stuntz",
  82.         MUIA_Application_Description, "Demonstrate MUI's menu classes.",
  83.         MUIA_Application_Base       , "MENU",
  84.         MUIA_Application_Window, win1 = WindowObject,
  85.             MUIA_Window_Title, "Menus",
  86.             MUIA_Window_ID   , MAKE_ID('M','E','N','1'),
  87.             MUIA_Window_Menustrip, strip = MUI_MakeObject(MUIO_MenustripNM,MenuData1,0),
  88.             WindowContents, VGroup,
  89.                 Child, cy1 = MUI_MakeObject(MUIO_Cycle,NULL,endis1),
  90.                 Child, HGroup, MUIA_Group_SameSize, TRUE,
  91.                     Child, cy2 = MUI_MakeObject(MUIO_Cycle,NULL,endis2),
  92.                     Child, cy3 = MUI_MakeObject(MUIO_Cycle,NULL,endis3),
  93.                     End,
  94.                 Child, MUI_MakeObject(MUIO_HBar,4),
  95.                 Child, HGroup,
  96.                     Child, HSpace(0),
  97.                     Child, radio = MUI_MakeObject(MUIO_Radio,NULL,hardware),
  98.                     Child, HSpace(0),
  99.                     Child, MUI_MakeObject(MUIO_VBar,1),
  100.                     Child, HSpace(0),
  101.                     Child, ColGroup(2),
  102.                         Child, Label("_MUI"    ), Child, cm1 = MUI_MakeObject(MUIO_Checkmark,"_MUI"    ),
  103.                         Child, Label("M_FR"    ), Child, cm2 = MUI_MakeObject(MUIO_Checkmark,"M_FR"    ),
  104.                         Child, Label("Magic_WB"), Child, cm3 = MUI_MakeObject(MUIO_Checkmark,"Magic_WB"),
  105.                         Child, Label("_DFA"    ), Child, cm4 = MUI_MakeObject(MUIO_Checkmark,"_DFA"    ),
  106.                         End,
  107.                     Child, HSpace(0),
  108.                     End,
  109.                 Child, MUI_MakeObject(MUIO_HBar,4),
  110.                 Child, HGroup, MUIA_Group_SameSize, TRUE,
  111.                     Child, btadd = MUI_MakeObject(MUIO_Button,"_Add Misc Menu"),
  112.                     Child, btrem = MUI_MakeObject(MUIO_Button,"_Remove Misc Menu"),
  113.                     End,
  114.                 End,
  115.             End,
  116.         End;
  117.  
  118.     menumisc = MenuObject, MUIA_Menu_Title, "Misc",
  119.         MUIA_Family_Child, MUI_MakeObject(MUIO_Menuitem,"Dynamic" ,0,0,0),
  120.         MUIA_Family_Child, MUI_MakeObject(MUIO_Menuitem,"Adding"  ,0,0,0),
  121.         MUIA_Family_Child, MUI_MakeObject(MUIO_Menuitem,"Of"      ,0,0,0),
  122.         MUIA_Family_Child, MUI_MakeObject(MUIO_Menuitem,"Items"   ,0,0,0),
  123.         MUIA_Family_Child, MUI_MakeObject(MUIO_Menuitem,"Is"      ,0,0,0),
  124.         MUIA_Family_Child, MUI_MakeObject(MUIO_Menuitem,"Possible",0,0,0),
  125.         End;
  126.  
  127.     if (!app || !menumisc)
  128.         fail(app,"Failed to create Application.");
  129.  
  130.     menuset  = (APTR)DoMethod(strip,MUIM_FindUData,MEN_SETTINGS);
  131.     menuedit = (APTR)DoMethod(strip,MUIM_FindUData,MEN_EDIT);
  132.     itemhw   = (APTR)DoMethod(strip,MUIM_FindUData,MEN_HARDWARE);
  133.     itemsw   = (APTR)DoMethod(strip,MUIM_FindUData,MEN_SOFTWARE);
  134.  
  135.     DoMethod(cy1,MUIM_Notify,MUIA_Cycle_Active,MUIV_EveryTime,menuset,3,MUIM_Set,MUIA_Menu_Enabled    ,MUIV_TriggerValue);
  136.     DoMethod(cy2,MUIM_Notify,MUIA_Cycle_Active,MUIV_EveryTime,itemhw ,3,MUIM_Set,MUIA_Menuitem_Enabled,MUIV_TriggerValue);
  137.     DoMethod(cy3,MUIM_Notify,MUIA_Cycle_Active,MUIV_EveryTime,itemsw ,3,MUIM_Set,MUIA_Menuitem_Enabled,MUIV_TriggerValue);
  138.  
  139.     DoMethod(btadd,MUIM_Notify,MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_ADD);
  140.     DoMethod(btrem,MUIM_Notify,MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_REM);
  141.  
  142.     DoMethod(app,MUIM_Notify,MUIA_Application_MenuAction,MEN_A1000,radio,3,MUIM_Set,MUIA_Radio_Active,0);
  143.     DoMethod(app,MUIM_Notify,MUIA_Application_MenuAction,MEN_A2000,radio,3,MUIM_Set,MUIA_Radio_Active,1);
  144.     DoMethod(app,MUIM_Notify,MUIA_Application_MenuAction,MEN_A3000,radio,3,MUIM_Set,MUIA_Radio_Active,2);
  145.     DoMethod(app,MUIM_Notify,MUIA_Application_MenuAction,MEN_A4000,radio,3,MUIM_Set,MUIA_Radio_Active,3);
  146.  
  147.     DoMethod(cm1,MUIM_Notify,MUIA_Selected,MUIV_EveryTime,strip,4,MUIM_SetUData,MEN_MUI,MUIA_Menuitem_Checked,MUIV_TriggerValue);
  148.     DoMethod(cm2,MUIM_Notify,MUIA_Selected,MUIV_EveryTime,strip,4,MUIM_SetUData,MEN_MFR,MUIA_Menuitem_Checked,MUIV_TriggerValue);
  149.     DoMethod(cm3,MUIM_Notify,MUIA_Selected,MUIV_EveryTime,strip,4,MUIM_SetUData,MEN_MWB,MUIA_Menuitem_Checked,MUIV_TriggerValue);
  150.     DoMethod(cm4,MUIM_Notify,MUIA_Selected,MUIV_EveryTime,strip,4,MUIM_SetUData,MEN_DFA,MUIA_Menuitem_Checked,MUIV_TriggerValue);
  151.  
  152.     DoMethod(radio,MUIM_Notify,MUIA_Radio_Active,MUIV_EveryTime,app,2,MUIM_Application_ReturnID,ID_RADIO);
  153.  
  154.     DoMethod(win1,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,app,2,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  155.  
  156.     set(btrem,MUIA_Disabled,TRUE);
  157.  
  158.     set(cm1,MUIA_UserData,MEN_MUI);
  159.     set(cm2,MUIA_UserData,MEN_MFR);
  160.     set(cm3,MUIA_UserData,MEN_MWB);
  161.     set(cm4,MUIA_UserData,MEN_DFA);
  162.  
  163.  
  164. /*
  165. ** Input loop...
  166. */
  167.  
  168.     set(win1,MUIA_Window_Open,TRUE);
  169.  
  170.     while (running)
  171.     {
  172.         ULONG id = DoMethod(app,MUIM_Application_Input,&signals);
  173.  
  174.         switch (id)
  175.         {
  176.             case MEN_QUIT:
  177.             case MUIV_Application_ReturnID_Quit:
  178.                 running = FALSE;
  179.                 break;
  180.  
  181.             case MEN_ABOUT:
  182.                 MUI_Request(app,win1,0,NULL,"OK","Some little about window.");
  183.                 break;
  184.  
  185.             case ID_ADD:
  186.                 set(btadd,MUIA_Disabled,TRUE);
  187.                 set(btrem,MUIA_Disabled,FALSE);
  188.                 DoMethod(strip,MUIM_Family_Insert,menumisc,menuedit);
  189.                 addedmisc = TRUE;
  190.                 break;
  191.  
  192.             case ID_REM:
  193.                 set(btadd,MUIA_Disabled,FALSE);
  194.                 set(btrem,MUIA_Disabled,TRUE);
  195.                 DoMethod(strip,MUIM_Family_Remove,menumisc);
  196.                 addedmisc = FALSE;
  197.                 break;
  198.  
  199.             case MEN_MUI:
  200.             case MEN_MFR:
  201.             case MEN_MWB:
  202.             case MEN_DFA:
  203.                 DoMethod(strip,MUIM_GetUData,id,MUIA_Menuitem_Checked,&x);
  204.                 DoMethod(win1,MUIM_SetUData,id,MUIA_Selected,x);
  205.                 break;
  206.  
  207.             case ID_RADIO:
  208.                 get(radio,MUIA_Radio_Active,&x);
  209.                 DoMethod(itemhw,MUIM_SetUData,MEN_A1000,MUIA_Menuitem_Checked,x==0);
  210.                 DoMethod(itemhw,MUIM_SetUData,MEN_A2000,MUIA_Menuitem_Checked,x==1);
  211.                 DoMethod(itemhw,MUIM_SetUData,MEN_A3000,MUIA_Menuitem_Checked,x==2);
  212.                 DoMethod(itemhw,MUIM_SetUData,MEN_A4000,MUIA_Menuitem_Checked,x==3);
  213.                 break;
  214.         }
  215.         if (running && signals) Wait(signals);
  216.     }
  217.  
  218.     set(win1,MUIA_Window_Open,FALSE);
  219.  
  220. /*
  221. ** Shut down...
  222. */
  223.  
  224.     if (!addedmisc)
  225.         MUI_DisposeObject(menumisc);
  226.  
  227.     fail(app,NULL);
  228. }
  229.